The present invention relates to digital memories and memory addressing circuits in general and in particular to an address translating apparatus for translating addresses from a conventional address register in a conventional central processing unit (CPU) to a "hidden" or "internal" address for addressing an internal memory.
Internal memories typically comprise conventional read/write memories, random access memories (RAM's) and read-only memories (ROM's). Among the memories listed, ROM's are frequently used for storing computer programs, data lists and other similar matter which are not intended to be changed. As with other conventional non-volatile recording media, such as paper tape, magnetic tape and magnetic discs, ROM's also provide a convenient means for permanently storing and disseminating computer programs, data lists and the like.
With an ever increasing use of computers in business and industry, there has been a corresponding increase in the dissemination of particular programs using various types of non-volatile memories including ROM's. With the increased dissemination of particular programs, there has also been an increase in the unauthorized copying of the programs which is causing serious and considerable economic loss to those who have invested great amounts of time and money in the development of the programs.
Like other recorded media, such as paper tape, magnetic tape and magnetic discs, ROM's can also be copied directly. Their structure, however, makes their mass programming usually prohibitively expensive.
The considerable expense connected with direct copying of ROM's, however, has been found not to be an insurmountable obstacle. Conventional ROM's, like many other types of prerecorded media, provide independent and random access to any location within the ROM's. That is, every access is independent of every other access. In those cases where it becomes prohibitively expensive to duplicate a ROM, this independent and random access makes it a relatively simple matter using conventional means, to read out a program from the ROM and to transfer the data read to a tape or disc. Later, after reloading the program into another type of memory, such as a random access memory (RAM), the program may be used in any conventional manner.
In the past, several methods have been employed in an attempt to prevent the unauthorized duplication of a computer program or data list stored in a ROM. For example, in one such method there is provided in a ROM program initial security instructions. When an unauthorized user reads out the ROM the security instructions are transferred together with the other contents of the ROM to a RAM or other read/write memory which is typically used during the data readout and transfer operation. Thereafter when the instructions are executed from the RAM or other read/write memory, they store zeros or other extraneous information in some or all of the program locations in the memory. This is possible because in transferring the contents of a ROM to a conventional read/write memory, as by a sequential addressing of the ROM, the addresses of the contents of the ROM are necessarily preserved in the conventional read/write memory. This results, in effect, in a ROM program which when duplicated in a conventional read/write memory is a program which destroys itself.
One of the problems associated with the above described method for frustrating unauthorized duplication of ROM programs is that the security method itself can be frustrated by an unauthorized user. This can be done by the user simply obtaining a printout of the program by conventional means and by manual or automatic conventional disassembly procedures, detecting and rendering ineffective the extraneous security instructions.
Another disadvantage of conventional memories and memory addressing apparatus is the limited address space available in many addressing apparatus. This is because the limited address space severely limits the size of the programs and data storage that can be used with the addressing apparatus.
Because computer programs comprise sequences of instructions which are generally written in successive memory locations, it is possible to take advantage of this fact and retrieve a large program with relatively few addresses. Principally, the only addresses that are required are those associated with initial and conditional jump instructions. For this reason, auxiliary addressing apparatus can be used advantageously.